import 'package:enterprise_v6_app/app/components/toast_widget.dart';
import 'package:enterprise_v6_app/app/core/http/http.dart';
import 'package:enterprise_v6_app/app/core/utils/interface.dart';
import 'package:enterprise_v6_app/app/core/utils/log_util.dart';
import 'package:enterprise_v6_app/app/data/entities/inspec/ins_task_detail_entity.dart';
import 'package:enterprise_v6_app/router/app_pages.dart';
import 'package:get/get.dart';

class RunTaskDetailController extends GetxController {
  // 计划id
  String? id;

  /// 排查计划使用
  //	单元id
  String? unitId;

  //	计划id
  String? planId;

  /// 页面类型 [pageType] 0:巡检计划  1:排查计划
  int pageType = Get.arguments['type'] as int;

  /// 任务列表
  List<InsTaskDetailEntity> taskList = [];

  /// 计划倒计时
  int taskCountDown = 0;

  @override
  void onInit() {
    super.onInit();
    //0:巡检计划  1:排查计划
    if (pageType == 0) {
      id = Get.arguments['id'] as String;
    } else {
      unitId = Get.arguments['unitId'] as String;
      planId = Get.arguments['planId'] as String;
    }
  }

  /// 去执行未完成的任务
  /// checkStatus 正常：0；  存在隐患：1；  未排查：2；   其他：3;     待排查：4
  void goUndoneTask(int index) {
    // // 判断当前时间是否在任务时间内
    // final DateTime now = DateTime.now();
    // final DateTime startTime = DateTime.parse(taskList[index].workStartTime!);
    // final DateTime endTime = DateTime.parse(taskList[index].workEndTime!);
    // if ((now.isBefore(startTime) || now.isAfter(endTime)) && taskList[index].checkStatus == 4) {
    //   AppToast.showWarning('当前时间不在任务时间内');
    //   return;
    // }
    if (taskList[index].checkStatus != 4) {
      AppToast.showWarning('任务已完成');
      return;
    }
    if (!getIsCanExecuted(taskList[index])) {
      AppToast.showWarning('当前时间不在任务时间内');
      return;
    }
    Get.toNamed(AppRoutes.hazardSupplementaryDetailsPage, arguments: {
      'title': '巡检任务',
      'taskId': taskList[index].id,
    })?.then((value) {
      if (value != null) {
        getTaskList();
      }
    });
  }

  /// 判断当前时间是否在任务时间内且可以执行
  bool getIsCanExecuted(InsTaskDetailEntity entity) {
    // 判断当前时间是否在任务时间内
    final DateTime now = DateTime.now();
    final DateTime startTime = DateTime.parse(entity.workStartTime!);
    final DateTime endTime = DateTime.parse(entity.faultLastTime!);
    // 当前时间在开始时间之后且在结束时间之前且状态为未开始
    if (now.isAfter(startTime) && now.isBefore(endTime) && entity.checkStatus == 4) {
      return true;
    } else {
      return false;
    }
  }

  /// 获取任务倒计时
  void getTaskCountDown() {
    // 初始化一个变量用于存储最小的日期时间
    DateTime? minDateTime;

    for (var task in taskList) {
      if ((task.checkStatus == 2 || task.checkStatus == 4) && getIsCanExecuted(task)) {
        try {
          // 将日期时间字符串解析为DateTime对象
          final DateTime dateTime = DateTime.parse(task.faultLastTime!);
          // 如果是第一个日期时间或者当前日期时间更早，则更新最小日期时间和索引
          if (minDateTime == null || dateTime.isBefore(minDateTime)) {
            minDateTime = dateTime;
          }
        } catch (e) {
          AppLogger.printLog(e.toString());
        }
      }
    }
    // 获取当前时间
    final DateTime now = DateTime.now();
    if (minDateTime != null) {
      // 计算时间差
      final Duration difference = minDateTime.difference(now);
      taskCountDown = difference.inMilliseconds;
    }
  }

  //  获取任务列表
  Future<void> getTaskList() async {
    if (pageType == 0) {
      final response = await HttpUtil().generateGetRequest<List<InsTaskDetailEntity>>(Interface.getTaskListByUnitId, queryParameters: {
        'unitId': id,
      }).execute();

      response.onSuccess((result) {
        if (result.data != null) {
          taskList = result.data!;
          getTaskCountDown();
          update();
        }
      });
    } else {
      final response = await HttpUtil().generateGetRequest<List<InsTaskDetailEntity>>(Interface.getPlanTaskList, queryParameters: {
        'unitId': unitId,
        'planId': planId,
      }).execute();

      response.onSuccess((result) {
        if (result.data != null) {
          taskList = result.data!;
          getTaskCountDown();
          update();
        }
      });
    }
  }



  @override
  void onReady() {
    super.onReady();
    getTaskList();
  }
}
